#!/bin/bash
# 简化本地打包并且发布 Docker 的过程

# 定义一个函数来显示加载动画
# loading() {
#     local msg="$1" # 提示信息
#     local frames="-\|/" # 动画帧序列
#     local delay=0.1 # 动画帧间隔时间，单位秒
#     local index=0 # 当前帧索引

#     # 清除当前行（如果支持的话，某些终端可能不完全支持）
#     printf "\033[2K\r" # \033[2K 清除整行，\r 回车到行首

#     # 循环显示动画
#     while :; do
#         printf "%s %s" "$msg" "${frames:$index:1}" # 打印当前帧
#         index=$(( (index+1) % ${#frames} )) # 更新帧索引以循环动画
#         sleep $delay
#         printf "\r" # 回车到行首准备下一次覆盖打印
#     done &
#     pid=$! # 记录动画进程ID
# }

# # 停止加载动画函数
# stop_loading() {
#     if [ -n "$pid" ]; then
#         kill $pid
#         wait $pid 2>/dev/null # 等待动画进程结束
#         printf "\n" # 停止动画后打印完成信息并换行
#     fi
# }

# 判断dist文件夹是否存在，存在则删除
if [ -d "dist" ]; then
    rm -rf dist > /dev/null 2>&1
    echo "dist文件夹已删除"
fi

# 启动加载动画
# loading "请稍候，正在执行打包命令"
# 打包项目
npm run build

# 判断dist文件夹是否存在，不存在则退出
if [ ! -d "dist" ]; then
    echo "dist文件夹不存在，打包失败"
    # 停止加载动画
    # stop_loading
    exit 1
fi

# 停止加载动画
# stop_loading

# 查看 Docker中是否存在vue容器
docker ps -a | grep vue > /dev/null 2>&1
if [ $? -eq 0 ]; then
    docker stop vue > /dev/null 2>&1
    docker rm vue > /dev/null 2>&1
    echo "vue容器已停止并删除"
    else
      echo "当前环境不存在vue容器"
fi

# 查看 Docker中是否存在 vue-image 镜像，存在则删除
docker image ls | grep vue-image > /dev/null 2>&1
if [ $? -eq 0 ]; then
    docker rmi vue-image > /dev/null 2>&1
    echo "vue-image镜像已删除"
    else
      echo "当前环境不存在vue-image镜像"
fi

# 启动加载动画
# loading "正在构建镜像"

# 构建Docker镜像
docker build -t vue-image .

# 判断镜像是否构建成功
docker image ls | grep vue-image > /dev/null 2>&1
if [ $? -eq 0 ]; then
    echo "vue-image镜像已构建成功"
    else
      echo "vue-image镜像构建失败"
      # 停止加载动画
    #   stop_loading
      exit 1
fi

# 停止加载动画
# stop_loading

# 运行Docker容器
docker run -d -p 3000:3000 --name vue vue-image > /dev/null 2>&1

echo "Docker容器已启动"